package cn.actoncode.boot.framework.common.http;


import cn.actoncode.boot.framework.common.exception.ServiceErrorException;
import cn.actoncode.boot.framework.common.http.enums.PlatformType;

import java.io.IOException;
import java.util.Map;

/**
 * http请求执行器.
 *
 * @param <T> 返回值类型
 * @param <E> 请求参数类型
 * @author bin
 */
public interface RequestExecutor<T, E> {

    /**
     * 执行http请求.
     *
     * @param uri        uri
     * @param headers    请求头
     * @param data       数据
     * @param platformType    平台类型
     * @return 响应结果
     * @throws ServiceErrorException 自定义异常
     * @throws IOException          io异常
     */
    T execute(String uri, Map<String, String> headers, E data, PlatformType platformType) throws ServiceErrorException, IOException;

    /**
     * 执行http请求.
     *
     * @param uri        uri
     * @param headers    请求头
     * @param data       数据
     * @param handler    http响应处理器
     * @param platformType    平台类型
     * @throws ServiceErrorException 自定义异常
     * @throws IOException          io异常
     */
    void execute(String uri, Map<String, String> headers, E data, ResponseHandler<T> handler, PlatformType platformType) throws ServiceErrorException, IOException;


}
